package com.itheima.Demo04;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.Collection;

@SuppressWarnings("all")
public class Demo01 {
    public static void main(String[] args) {
        //创建集合
        Collection<String> list = new ArrayList<>();
        list.add("abc");
        list.add("def");
        list.add("abc");
        list.add("abc");
        System.out.println(list);
        //产生一个代理对象,调用代理对象的删除方法直接能删除所有符合条件的元素
        Collection<String> list2 = (Collection<String>) Proxy.newProxyInstance(list.getClass().getClassLoader(), list.getClass().getInterfaces(), new InvocationHandler() {
            @Override
            public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
                //不管是什么方法，都先执行一次
                Object invoke = method.invoke(list, objects);


                if (method.getName().equals("remove")) {
                    //删除集合中所有符合条件的元素
                    for (int i = list.size() - 1; i >= 0; i--) {
                        method.invoke(list, objects);
                    }
                }

                return invoke;
            }
        });
        list2.add("qwe");
        list2.remove("abc");
        System.out.println(list);
    }

}
